# 条件表达式 语句1 if 条件 else 语句2， 当条件成立执行语句1，否则执行语句2, 并返回执行结果
print('hello') if True else print('world')
a = 10 
b = 20
c = 30
max = a if (a > b and a > c) else (b if b > c else c)
# 等价于 max = a if a > b and a > c else b if b > c else c 但是最好加上括号，易读
print('max =', max)
# python中支持连续运算，此处相当于计算2>1并且2<3，只运算中间值
a = 1 < 2 < 3

# 流程控制语句
# if 条件 ： 语句
if True : print('hello world')
# if 条件 :
#   (缩进)代码块
# 注意：python中缩进支持空格和tab键，但是不能同时使用，就是一个python文件要么都用空格，要么都用tab键，官方推荐使用空格
# "translate_tabs_to_spaces": false, sublime中可以设置将tab键自动转换为空格，preferences => settings
# 此外sublime右下角：Spaces:4 点击，可以随意在tab和space之间转换
if True :
    print('hello')
    print('world')
# 逻辑运算
a = 10
if a > 1 and a < 20 :
    print('a between 1 and 20')
# 等同于   
if 1 < a < 20 : 
    print('a between 1 and 20')

# if 条件 :
#      代码块
# else : 
#      代码块
# 下面的不能通过ctrl + b运行，需要通过Tools => SublimeRPEL -> Python -> python RUN current file
# a = input('===>')
# if a == 'admin' :
#     print('hello', a)
# else :
#     print('hello', a)

# if 条件 :
#       代码块
# elif 条件 :
#       代码块
# else :
#       代码块
if a < 10 :
    print('a')
elif a < 20 :
    print('b')
elif a < 30 :
    print('c')
else :
    print('d')

# a = int(input('input a number: '))
# a = a % 2
# if a == 0 :
#     print('even')
# else :
#     print('odd')

# a = int(input('input a year: '))
# if (a % 4 == 0 and a % 100 != 0) or (a % 400 == 0) :
#     print('闰年')
# else :
#     print('不是闰年')

# a = int(input('input a dog age: '))
# age = 0
# if a < 0 :
#     print('error input')
# elif a <= 2 :
#     age = a * 10.5
# else :
#     age = (a - 2) * 4 + 10.5 * 2
# print('dog age like human :', age)

# a = 180
# b = 10
# c = 30
# if a >= 180 and b >= 1000 and c >= 500 :
#     print('ok')
# elif a >= 180 or b >= 1000 or c >= 500 :
#     print('just so so')
# else :
#     print('move away')

# 循环 while 、 for
# while 条件 :
#   代码块
i = 0
while i < 10 :
    print('print ', i)
    i += 1

# while 条件 :
#   代码块
# else :
#   代码块

while i > 0 :
    print('print ', i)
    i -= 1
else :
    print('finished!')

# 水仙花 n >=3 位数，各个位数的n次方和等于其本身，如1**3 + 5**3 + 3**3 = 153
a = 100
while a < 1000 :
    b1 = a // 100
    b2 = (a - b1 * 100) // 10
    b3 = a - b1 * 100 - b2 * 10
    if a == (b1**3 + b2**3 + b3**3) :
        print('水仙花：',a, end='\t')
    a += 1

print()
a = 100
while a < 1000 :
    b1 = a // 100
    b2 = a // 10 % 10
    b3 = a % 10
    if a == (b1**3 + b2**3 + b3**3) :
        print('水仙花：',a, end='\t')
    a += 1
print()

# 99乘法表
a = 1
b = 1
while a <= 9 :
    while b <= a :
        print(f'{a} * {b} = {a * b}',end='\t') 
        b += 1
    print()
    b = 1
    a += 1

# 质数，只能被1和本身整除的数，1既不是质数也不是合数
# python module 默认除了内置模块，其他模块需要在使用时引入，下面引入time模块计算程序执行花费时间
from time import *
begin = time()
a = 2
print('质数 :', end='\t')
while a < 100 :
    b = 2
    if a % b == 0 or a % (b + 1) == 0:
        a += 1
        continue
    flag = True
    while b <= a ** 0.5 : # 不需要找所有数，只需找到数的平方根大小即可，其实就是数值一半的位置
        if a % b == 0 :
            flag = False
            break   # 减少不必要的判断，执行时间明显缩短
        b += 1
    if flag :
        print(f'{a}', end='\t')
    a += 1
print()
end = time()
print(f'exe time {end - begin}')


# break: 退出循环，也会退出else, continue: 继续从头执行，跳过continue后的代码
a = 1
while a < 5 :
    a += 1
    if a % 3 == 0 :
        break
    if a % 2 == 0 :
        continue
    print(a, end='\t')
else :
    print('while - else')
# pass 占位符，什么作用都没有，就是暂时没有实现，后期再实现
if a :
    pass

# 断言，assert 表达式， 表达式为False时抛出AssertError
assert 2 > 1

# 释放变量, 相当于删除变量内存中对象间的指针
# 语法： del 变量1, 变量2...
del a 

